For modern business software, availability is a crucial feature. A company can face huge costs or income cuts, if the business software is down (even for a short period of time). For uninterrupted availability to such business software, unplanned downtime, as well as planned downtime needs to be addressed by organizations. Typically, two approaches are taken. First, business systems are often set up as “high availability” hardware clusters. Such clusters can be expensive due to specific hardware requirements as well as the amount of time and expertise required to set up, test, and maintain such clusters. Second, other mechanisms can be implemented to enable software maintenance without downtime however such mechanisms can increase complexity as well as the risk of failure.